home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 4
/
FM Towns Free Software Collection 4 - Disc 1.iso
/
fb386
/
ps_graph
/
ps.bas
next >
Wrap
BASIC Source File
|
1991-10-18
|
24KB
|
811 lines
1000 '
1010 ' PostScript(TM) Graph System F-BASIC386版
1020 ' Ver. 1.02
1030 ' 1991.05.17
1040 '
1050 '
1060 '
1070 'SAVE "PS100.BAS"
1080 CONSOLE 0,23,2
1090 ON KEY (1) GOSUB 1120
1100 KEY (1) ON
1110 GOTO 1190
1120 '--------------- PF1 KEY -----------------
1130 PRINT:COLOR 2
1140 PRINT "---PF1キーが押されました。終了してもいいですか。(Y/N)---"
1150 COLOR 7
1160 SSS$=INPUT$(1):IF SSS$<>"Y" AND SSS$<>"y" THEN RETURN
1170 KEY (1) OFF
1180 END
1190 'START
1200 F$="PS100.DAT"
1210 DIM ZD$(6,8,2)
1220 RESTORE *DEFALT
1230 FOR I=1 TO 6:FOR J=1 TO 8
1240 READ A$:ZD$(I,J,1)=A$:READ A$:ZD$(I,J,2)=A$
1250 NEXT J,I
1260 READ A$:M_TATE$=A$
1270 READ A$:M_YOKO$=A$
1280 READ A$:M_XSE$=A$
1290 READ A$:M_YSE$=A$
1300 READ A$:M_HI$=A$
1310 READ A$:M_OVER$=A$
1320 *START
1330 GOSUB *TITLE
1340 CLOSE
1350 ON ERROR GOTO *START_ERR
1360 PRINT
1370 INPUT "プリンター出力用のファイル名を入力してください。(Default=PS.OUT)";TEM$
1380 IF TEM$="" THEN TEM$="PS"
1390 IF LEN(TEM$)>6 THEN TEM$=LEFT$(TEM$,6)
1400 TEM$=TEM$+SPACE$(6-LEN(TEM$))
1410 FOUT$=TEM$+".OUT"
1420 OPEN FOUT$ FOR OUTPUT AS #2
1430 RESTORE *PSDATA:READ A$
1440 WHILE A$<>"z":PRINT #2,A$:READ A$:WEND
1450 CLOSE #2
1460 PN=1:PF=0
1470 ON ERROR GOTO 0
1480 GOTO *MAIN
1490 *START_ERR
1500 IF ERR<>64 THEN ON ERROR GOTO 0
1510 KILL FOUT$
1520 RESUME
1530 *MAIN
1540 CLS
1550 PRINT "----------- MENU -----------":PRINT
1560 PRINT " 1 : 新しくDATAを入力する。"
1570 PRINT " 2 : 既にあるDATAを活用する。":PRINT
1580 INPUT " 番号を入力して下さい。";MENU
1590 IF MENU=1 THEN *SINKI ELSE IF MENU=2 THEN *KATSUYOU
1600 GOTO 1540
1610 '
1620 *P.END
1630 PRINT "終了します。"
1640 KEY (1) OFF
1650 END
1660 '
1670 *SINKI
1680 OPEN F$ FOR INPUT AS #1
1690 '番号をカウント --> DNUMBER
1700 DNUMBER=0
1710 INPUT #1,A$
1720 IF A$<>"ZZZ" THEN 1710
1730 DNUMBER=DNUMBER+1
1740 IF NOT EOF(1) THEN 1710
1750 CLOSE #1
1760 '
1770 OPEN F$ FOR APPEND AS #1
1780 IF PF THEN 1850
1790 '-------------------------------------
1800 GOSUB *HYOUJI:GOSUB *INP.11
1810 GOSUB *HYOUJI:GOSUB *INP.31
1820 GOSUB *HYOUJI:GOSUB *INP.32
1830 GOSUB *HYOUJI:GOSUB *INP.TATE
1840 GOSUB *HYOUJI:GOSUB *INP.YOKO
1850 GOSUB *HYOUJI:GOSUB *INP.XSE
1860 GOSUB *HYOUJI:GOSUB *INP.YSE
1870 GOSUB *HYOUJI:GOSUB *INP.HI
1880 '-------------------------------------
1890 GOSUB *ICHI
1900 GOSUB *HYOUJI:P=1:GOSUB *INP.SIKI
1910 GOSUB *HYOUJI:P=2:GOSUB *INP.SIKI
1920 GOSUB *HYOUJI:P=5:PP=1:GOSUB *INP.ST
1930 GOSUB *HYOUJI:P=5:PP=2:GOSUB *INP.ST
1940 GOSUB *HYOUJI:P=5:PP=3:GOSUB *INP.ST
1950 GOSUB *HYOUJI:P=6:PP=3:GOSUB *INP.ST
1960 GOSUB *HYOUJI:P=6:PP=4:GOSUB *INP.ST
1970 GOSUB *HYOUJI:P=6:PP=5:GOSUB *INP.ST
1980 GOSUB *MISS.CHECK
1990 GOSUB *CALCULATE
2000 GOSUB *KAKIKOMI
2010 GOTO *INP.OVER
2020 '------------------------------------
2030 *SHOW
2040 OPEN FOUT$ FOR APPEND AS #2
2050 PRINT #2,"showpage"
2060 CLOSE #2
2070 GOSUB *REPRINT
2080 GOTO *START
2090 *REPRINT
2100 OPEN "LPT0:" FOR OUTPUT AS #1
2110 OPEN FOUT$ FOR INPUT AS #2
2120 PRINT "ただ今印刷中です。"
2130 WHILE NOT EOF(2):INPUT #2,P$:PRINT #1,P$:WEND
2140 CLOSE
2150 RETURN
2160 '------------------------------------
2170 *KATSUYOU
2180 PRINT
2190 PRINT "---------- サブ メニュー ----------"
2200 PRINT " 1 : データ番号を入力する。"
2210 PRINT " 2 : データ一覧を表示する。"
2220 PRINT " 3 : メイン メニューに戻る。":PRINT
2230 INPUT " 番号を入力してください。";TEM
2240 IF TEM<1 OR TEM>3 THEN CLS:GOTO *KATSUYOU
2250 IF TEM=3 THEN *MAIN
2260 IF TEM=2 THEN *KATSU1
2270 PRINT
2280 *KA_0
2290 INPUT "DATA の番号を入力してください。";DNUMBER
2300 IF DNUMBER=0 THEN *KA_0
2310 KNUMBER=0
2320 OPEN F$ FOR INPUT AS #1
2330 *KA_1
2340 INPUT #1,A$
2350 IF A$<>"ZZZ" THEN *KA_1
2360 IF EOF(1) THEN *KA_ERR
2370 KNUMBER=KNUMBER+1
2380 IF KNUMBER<>DNUMBER THEN *KA_1
2390 PRINT "DATA が見つかりました。"
2400 GOSUB *IN.FILE
2410 CLOSE #1
2420 GOSUB *ICHI
2430 GOSUB *MISS.CHECK
2440 GOSUB *CALCULATE
2450 INPUT "このデータを使用しますか。";TEM$
2460 IF TEM$="N" OR TEM$="n" THEN *KATSUYOU
2470 INPUT "この DATA を更新しますか。";TEM$
2480 IF TEM$="Y" OR TEM$="y" THEN GOSUB *KAKIKOMI ELSE GOSUB *KAKI.PFILE
2490 GOTO *INP.OVER
2500 '
2510 *KA_ERR
2520 COLOR 2
2530 PRINT "DATA が見つかりませんでした。"
2540 COLOR 7
2550 CLOSE #1
2560 GOTO *KATSUYOU
2570 '
2580 *KATSU1
2590 CLS
2600 DNUMBER=0
2610 OPEN F$ FOR INPUT AS #1
2620 INPUT #1,A$
2630 PRINT A$
2640 PRINT " No. DATE TIME コメント"
2650 PRINT " 式(X) 式(Y)"
2660 *KA1_1
2670 INPUT #1,A$
2680 IF A$<>"ZZZ" THEN *KA1_1
2690 IF EOF(1) THEN *KA1_END
2700 DNUMBER=DNUMBER+1
2710 INPUT #1,ZDATE$
2720 INPUT #1,ZTIME$
2730 INPUT #1,ZD$(1,1,1)
2740 INPUT #1,SIKIX$
2750 INPUT #1,SIKIY$
2760 PRINT "-------------------------------------"
2770 PRINT USING " ### & & & & & &";DNUMBER;ZDATE$;ZTIME$;ZD$(1,1,1)
2780 PRINT USING " X=& & Y=& &";SIKIX$;SIKIY$
2790 IF (DNUMBER MOD 4)<>0 THEN *KA1_1
2800 PRINT "SPACE BARで表示続行、その他で中止します。"
2810 A$=INPUT$(1):IF A$=" " THEN *KA1_1
2820 BEEP:COLOR 2
2830 PRINT "データの表示を中止しました。"
2840 COLOR 7:GOTO *KA1_2
2850 *KA1_END
2860 PRINT:PRINT "データは以上です。"
2870 *KA1_2
2880 CLOSE #1
2890 GOTO *KATSUYOU
2900 '
2910 '--------------------------------------
2920 *KAKIKOMI
2930 IF MENU=1 THEN *KAKI_1
2940 IF MENU=2 THEN *KAKI_2
2950 RETURN
2960 *KAKI_1
2970 GOSUB *SEND.FILE
2980 DNUMBER=DNUMBER+1
2990 GOSUB *KAKI.PFILE
3000 CLOSE #1
3010 RETURN
3020 *KAKI_2
3030 CLOSE
3040 OPEN F$ FOR INPUT AS #2
3050 OPEN "TEMP" FOR OUTPUT AS #1
3060 TNUMBER=0
3070 *KAKI_3
3080 IF EOF(2) THEN *KAKI_5
3090 INPUT #2,A$
3100 PRINT #1,A$
3110 IF A$<>"ZZZ" THEN *KAKI_3
3120 TNUMBER=TNUMBER+1
3130 IF TNUMBER<>DNUMBER THEN *KAKI_3
3140 GOSUB *SEND.FILE
3150 *KAKI_4
3160 INPUT #2,A$
3170 IF A$<>"ZZZ" THEN *KAKI_4 ELSE *KAKI_3
3180 *KAKI_5
3190 CLOSE
3200 KILL F$
3210 NAME "TEMP" AS F$
3220 GOSUB *KAKI.PFILE
3230 RETURN
3240 '
3250 *KAKI.PFILE
3260 OPEN FOUT$ FOR APPEND AS #2
3270 RESTORE *START.DATA
3280 *KAP_1
3290 READ A$
3300 IF LEFT$(A$,2)<>"zz" THEN *KAP_2
3310 P=VAL(MID$(A$,3,1)):PP=VAL(RIGHT$(A$,1))
3320 A$=ZD$(P,PP,1)
3330 *KAP_2
3340 IF A$="z" OR A$="Z" THEN CLOSE #2:RETURN
3350 PRINT #2,A$
3360 GOTO *KAP_1
3370 '-----------------------------------------
3380 *ICHI
3390 IF PF THEN ZD$(2,1,1)="0":ZD$(2,2,1)="0":RETURN
3400 IF PN=1 THEN ZD$(2,1,1)="180"
3410 IF PN=2 THEN ZD$(2,1,1)="270"
3420 IF PN=3 THEN ZD$(2,1,1)="-270"
3430 IF PN=4 THEN ZD$(2,1,1)="270"
3440 IF PN=1 THEN ZD$(2,2,1)="180"
3450 IF PN=2 THEN ZD$(2,2,1)="0"
3460 IF PN=3 THEN ZD$(2,2,1)="350"
3470 IF PN=4 THEN ZD$(2,2,1)="0"
3480 RETURN
3490 '入力サブルーチン-------------------------
3500 *INP.1VAL
3510 PRINT MES$;" ";:INPUT TEM$
3520 RETURN
3530 *INP.2VAL
3540 PRINT MES$;" ";:INPUT TEM1$,TEM2$
3550 RETURN
3560 '----------------------------------------
3570 *INP.ERR
3580 PRINT "入力エラーです。入れ直してください。"
3590 RETURN
3600 '----------------------------------------
3610 *INP.11
3620 MES$=ZD$(1,1,2):GOSUB *INP.1VAL:ZD$(1,1,1)=TEM$
3630 RETURN
3640 *INP.31
3650 MES$=ZD$(3,1,2):GOSUB *INP.1VAL
3660 IF TEM$=CHR$(13) THEN RETURN
3670 IF TEM$="y" OR TEM$="Y" THEN ZD$(3,1,1)="true" ELSE ZD$(3,1,1)="false"
3680 RETURN
3690 *INP.32
3700 MES$=ZD$(3,2,2):GOSUB *INP.1VAL
3710 IF TEM$=CHR$(13) THEN RETURN
3720 IF TEM$="y" OR TEM$="Y" THEN ZD$(3,2,1)="true" ELSE ZD$(3,2,1)="false"
3730 RETURN
3740 *INP.TATE
3750 MES$=M_TATE$:GOSUB *INP.1VAL:TATE=VAL(TEM$)
3760 IF TATE<=0 THEN GOSUB *INP.ERR:GOTO *INP.TATE
3770 RETURN
3780 *INP.YOKO
3790 MES$=M_YOKO$:GOSUB *INP.1VAL:YOKO=VAL(TEM$)
3800 IF YOKO<=0 THEN GOSUB *INP.ERR:GOTO *INP.YOKO
3810 RETURN
3820 *INP.XSE
3830 MES$=M_XSE$:GOSUB *INP.2VAL
3840 XSTART=VAL(TEM1$):XEND=VAL(TEM2$)
3850 IF XEND-XSTART<=0 THEN *INP.XSE
3860 RETURN
3870 *INP.YSE
3880 MES$=M_YSE$:GOSUB *INP.2VAL
3890 YSTART=VAL(TEM1$):YEND=VAL(TEM2$)
3900 IF YEND-YSTART<=0 THEN *INP.YSE
3910 RETURN
3920 *INP.HI
3930 MES$=M_HI$:GOSUB *INP.1VAL
3940 IF TEM$="" THEN TEM$=ZD$(4,2,1):RETURN
3950 IF VAL(TEM$)>0 THEN ZD$(4,2,1)=TEM$ ELSE *INP.HI
3960 RETURN
3970 *INP.OVER
3980 PRINT
3990 MES$=M_OVER$:GOSUB *INP.1VAL
4000 IF TEM$="y" OR TEM$="Y" THEN PF=-1 ELSE PF=0
4010 IF NOT PF THEN ZD$(3,1,1)="false":ZD$(3,2,1)=ZD$(3,1,1)
4020 IF PF THEN *MAIN
4030 INPUT "別のグラフを描きますか。";TEM$
4040 IF TEM$="y" OR TEM$="Y" THEN PN=PN+1 ELSE *SHOW
4050 IF PN>4 THEN PRINT "もう書けません。印刷します。":GOTO *SHOW
4060 GOTO *MAIN
4070 *INP.SIKI ' p=1 --- x p=2 --- y
4080 MES$=ZD$(6,P,2):GOSUB *INP.1VAL
4090 IF P=1 THEN SIKIX$=TEM$
4100 IF P=2 THEN SIKIY$=TEM$
4110 RETURN
4120 *INP.ST
4130 PRINT ZD$(P,PP,2);"(";ZD$(P,PP,1);")";:INPUT TEM$
4140 IF TEM$<>"" THEN ZD$(P,PP,1)=TEM$
4150 RETURN
4160 '--------------------------------------------
4170 *CALCULATE
4180 ZD$(3,4,1)=STR$(YOKO*2.83!)
4190 ZD$(3,7,1)=STR$(TATE*2.83!)
4200 HABA_X=YOKO*2.83!/(XEND-XSTART)
4210 HABA_Y=TATE*2.83!/(YEND-YSTART)
4220 HABA=HABA_X*(HABA_X<HABA_Y)+HABA_Y*(HABA_X>=HABA_Y)
4230 ZD$(3,5,1)=STR$(ABS(HABA)):ZD$(3,8,1)=ZD$(3,5,1)
4240 ZD$(3,3,1)=STR$(XSTART*ABS(HABA))
4250 ZD$(3,6,1)=STR$(YSTART*ABS(HABA))
4260 D$=SIKIX$:GOSUB *SPECIAL
4270 IF NOT ERRFLAG THEN ZD$(6,1,1)=DP$
4280 D$=SIKIY$:GOSUB *SPECIAL
4290 IF NOT ERRFLAG THEN ZD$(6,2,1)=DP$
4300 RETURN
4310 '--------------------------------------------
4320 *HYOUJI
4330 CI=1:CLS
4340 PRINT "---";PN;"個目のグラフです---"
4350 IF MENU=1 THEN *HY_1
4360 PRINT "このDATAは ";ZDATE$;" ";ZTIME$;" に作成されました。"
4370 *HY_1
4380 PRINT CI;" : ";ZD$(1,1,2);" ----- ";ZD$(1,1,1):CI=CI+1
4390 PRINT CI;" : ";ZD$(3,1,2);" ----- ";ZD$(3,1,1):CI=CI+1
4400 PRINT CI;" : ";ZD$(3,2,2);" ----- ";ZD$(3,2,1):CI=CI+1
4410 PRINT CI;" : ";M_TATE$ ;" ----- ";TATE :CI=CI+1
4420 PRINT CI;" : ";M_YOKO$ ;" ----- ";YOKO :CI=CI+1
4430 PRINT CI;" : ";M_XSE$ ;" ----- ";XSTART;" ,";XEND:CI=CI+1
4440 PRINT CI;" : ";M_YSE$ ;" ----- ";YSTART;" ,";YEND:CI=CI+1
4450 PRINT CI;" : ";M_HI$ ;" ----- ";ZD$(4,2,1):CI=CI+1
4460 PRINT CI;" : ";ZD$(6,1,2);" ----- ";SIKIX$ :CI=CI+1
4470 PRINT CI;" : ";ZD$(6,2,2);" ----- ";SIKIY$ :CI=CI+1
4480 PRINT CI;" : ";ZD$(5,1,2);" ----- ";ZD$(5,1,1):CI=CI+1
4490 PRINT CI;" : ";ZD$(5,2,2);" ----- ";ZD$(5,2,1):CI=CI+1
4500 PRINT CI;" : ";ZD$(5,3,2);" ----- ";ZD$(5,3,1):CI=CI+1
4510 PRINT CI;" : ";ZD$(6,3,2);" ----- ";ZD$(6,3,1):CI=CI+1
4520 PRINT CI;" : ";ZD$(6,4,2);" ----- ";ZD$(6,4,1):CI=CI+1
4530 PRINT CI;" : ";ZD$(6,5,2);" ----- ";ZD$(6,5,1):CI=CI+1
4540 PRINT
4550 RETURN
4560 *MISS.CHECK
4570 GOSUB *HYOUJI
4580 TEM=(VAL(ZD$(5,2,1))-VAL(ZD$(5,1,1)))/VAL(ZD$(5,3,1))
4590 IF TEM<1000 THEN *MI_1
4600 COLOR 2
4610 PRINT "--- プロットの回数が多すぎます。 ---"
4620 PRINT "-- パラメーターを調節してください。 --"
4630 BEEP:COLOR 7
4640 *MI_1
4650 PRINT "これでいいですか?"
4660 *MI_2
4670 PRINT "修正する時は番号を、これでいい時は0を入力してください。";
4680 INPUT CTEM:PRINT
4690 IF CTEM=0 THEN RETURN
4700 IF CTEM<0 OR CTEM>16 THEN *MI_2
4710 IF CTEM=9 THEN P=1 ELSE IF CTEM=10 THEN P=2
4720 IF CTEM=11 THEN P=5:PP=1
4730 IF CTEM=12 THEN P=5:PP=2
4740 IF CTEM=13 THEN P=5:PP=3
4750 IF CTEM=14 THEN P=6:PP=3
4760 IF CTEM=15 THEN P=6:PP=4
4770 IF CTEM=16 THEN P=6:PP=5
4780 ON CTEM GOSUB *INP.11,*INP.31,*INP.32,*INP.TATE,*INP.YOKO,*INP.XSE,*INP.YSE,*INP.HI,*INP.SIKI,*INP.SIKI
4790 IF CTEM>10 THEN GOSUB *INP.ST
4800 GOTO *MISS.CHECK
4810 '-----------------------------------------------
4820 *IN.FILE
4830 INPUT #1,ZDATA$
4840 INPUT #1,ZTIME$
4850 INPUT #1,ZD$(1,1,1)
4860 INPUT #1,SIKIX$
4870 INPUT #1,SIKIY$
4880 IF PF THEN INPUT #1,TEM ELSE INPUT #1,TATE
4890 IF PF THEN INPUT #1,TEM ELSE INPUT #1,YOKO
4900 INPUT #1,XSTART
4910 INPUT #1,XEND
4920 INPUT #1,YSTART
4930 INPUT #1,YEND
4940 INPUT #1,ZD$(4,2,1)
4950 INPUT #1,ZD$(3,1,1)
4960 INPUT #1,ZD$(3,2,1)
4970 INPUT #1,ZD$(5,1,1)
4980 INPUT #1,ZD$(5,2,1)
4990 INPUT #1,ZD$(5,2,1)
5000 INPUT #1,ZD$(6,3,1)
5010 INPUT #1,ZD$(6,4,1)
5020 INPUT #1,ZD$(6,5,1)
5030 RETURN
5040 '----------------------------------------------
5050 *SEND.FILE
5060 PRINT #1,ZDATA$
5070 PRINT #1,ZTIME$
5080 PRINT #1,ZD$(1,1,1)
5090 PRINT #1,SIKIX$
5100 PRINT #1,SIKIY$
5110 PRINT #1,TATE
5120 PRINT #1,YOKO
5130 PRINT #1,XSTART
5140 PRINT #1,XEND
5150 PRINT #1,YSTART
5160 PRINT #1,YEND
5170 PRINT #1,ZD$(4,2,1)
5180 PRINT #1,ZD$(3,1,1)
5190 PRINT #1,ZD$(3,2,1)
5200 PRINT #1,ZD$(5,1,1)
5210 PRINT #1,ZD$(5,2,1)
5220 PRINT #1,ZD$(5,2,1)
5230 PRINT #1,ZD$(6,3,1)
5240 PRINT #1,ZD$(6,4,1)
5250 PRINT #1,ZD$(6,5,1)
5260 PRINT #1,"ZZZ"
5270 RETURN
5280 '----------------------------------------------
5290 *TITLE
5300 CLS
5310 PRINT
5320 PRINT "GRAPH作成ツール PostScript(TM) Level 1 版"
5330 PRINT
5340 *TI_1
5350 PRINT " 番号で選んでください。(1-3)"
5360 PRINT " 1:GRAPHの作成"
5370 PRINT " 2:ユーティリティ"
5380 PRINT " 3:プログラムの終了"
5390 PRINT
5400 PRINT " (注)初めてこのプログラムを使う時は必ず"
5410 PRINT " ユーティリティで<データファイルの初"
5420 PRINT " 期化>を行ってください。"
5430 INPUT "",TEM$
5440 IF TEM$="1" THEN RETURN
5450 IF TEM$="2" THEN *UTILITY
5460 IF TEM$="3" THEN *P.END
5470 PRINT "もう一度入力して下さい。"
5480 GOTO *TI_1
5490 '
5500 *UTILITY
5510 CLS
5520 PRINT
5530 PRINT "--- ユーティリティ メニュー ---"
5540 PRINT
5550 PRINT " 1:データファイルの初期化(ファイル名'PS100.DAT'に固定)"
5560 PRINT " 2:すでにあるファイルを印刷する"
5570 PRINT " 3:ファイルの内容を一行ずつ見る(デバック用)"
5580 PRINT " 4:ファイルの内容を一行毎に変更する(デバック用)"
5590 PRINT " 0:メインメニューに戻る"
5600 PRINT
5610 INPUT " 番号を入力してください。";TEM
5620 IF TEM<0 OR TEM>4 THEN *UTILITY
5630 IF TEM=0 THEN RETURN
5640 ON TEM GOSUB *UTI1,*UTI2,*UTI3,*UTI4
5650 GOTO *UTILITY
5660 'FILE INITIALIZE
5670 *UTI1
5680 ON ERROR GOTO *FINIT_ERR
5690 OPEN F$ FOR OUTPUT AS #1
5700 PRINT #1,"GRAPH PS DATA FORMAT Version 1.00"
5710 PRINT #1,"ZZZ"
5720 CLOSE #1
5730 ON ERROR GOTO 0
5740 RETURN
5750 *FINIT_ERR
5760 IF ERR<>64 THEN ON ERROR GOTO 0
5770 KILL F$
5780 RESUME
5790 '
5800 *UTI2
5810 GOSUB *GET_FOUT_NAME
5820 IF UTILERR=0 THEN GOSUB *REPRINT
5830 RETURN
5840 '
5850 *UTI3
5860 PRINT
5870 PRINT "印刷ファイルの内容を一行ずつ画面に出力します。"
5880 PRINT " Q(q) --- 終了"
5890 PRINT " RETURN --- 次行"
5900 GOSUB *GET_FOUT_NAME
5910 IF UTILERR=1 THEN RETURN
5920 OPEN FOUT$ FOR INPUT AS #1
5930 WHILE NOT EOF(1)
5940 INPUT #1,A$
5950 PRINT A$
5960 A$=INPUT$(1)
5970 IF A$="Q" OR A$="q" THEN *UTI3_1
5980 WEND
5990 *UTI3_1
6000 CLOSE #1
6010 RETURN
6020 '
6030 *UTI4
6040 PRINT
6050 PRINT "印刷ファイルの内容を一行毎に修正できます。"
6060 PRINT " 文字列 --- その行を「文字列」で置き換えます。"
6070 PRINT " RETURNのみ --- 次行"
6080 PRINT " 「ZZ」 --- 中断(ファイルは更新されません。)"
6090 PRINT " 「ZZZ」 --- 終了(ファイルは更新されます。)"
6100 GOSUB *GET_FOUT_NAME
6110 IF UTILERR=1 THEN RETURN
6120 OPEN FOUT$ FOR INPUT AS #1
6130 OPEN "PS.X" FOR OUTPUT AS #2
6140 *UTI4_1
6150 IF EOF(1) THEN CLOSE:KILL FOUT$:NAME "PS.X" AS FOUT$:RETURN
6160 INPUT #1,A$:PRINT A$:INPUT "",AA$
6170 IF AA$="ZZ" THEN CLOSE:KILL "PS.X":RETURN
6180 IF AA$="ZZZ" THEN *UTI4_2
6190 IF AA$="" THEN AA$=A$
6200 PRINT #2,AA$
6210 GOTO *UTI4_1
6220 *UTI4_2
6230 WHILE NOT EOF(1)
6240 INPUT #1,A$
6250 PRINT #2,A$
6260 WEND
6270 GOTO *UTI4_1
6280 '
6290 *GET_FOUT_NAME
6300 UTILERR=0
6310 ON ERROR GOTO *UTIERR
6320 PRINT
6330 INPUT "プリンター出力用のファイル名を入力してください。";TEM$
6340 IF TEM$="" THEN TEM$="PS"
6350 IF LEN(TEM$)>6 THEN TEM$=LEFT$(TEM$,6)
6360 TEM$=TEM$+SPACE$(6-LEN(TEM$))
6370 FOUT$=TEM$+".OUT"
6380 OPEN FOUT$ FOR INPUT AS #1
6390 *UTIL_RESUME
6400 CLOSE #1
6410 ON ERROR GOTO 0
6420 RETURN
6430 *UTIERR
6440 IF ERR<>53 THEN ON ERROR GOTO 0
6450 BEEP:COLOR 2
6460 PRINT "入力されたファイルは存在しません。"
6470 COLOR 7
6480 PRINT "何かキーを押してください。":TEM$=INPUT$(1)
6490 UTILERR=1
6500 RESUME *UTIL_RESUME
6510 '
6520 '入力メニュー---------------------
6530 *DEFALT
6540 DATA ---,グラフにつける番号,,,,,,,,,,,,,,
6550 DATA 180,原点位置(x),200,原点位置(y),,,,,,,,,,,,
6560 DATA false,座標軸表示(Y/N),false,方眼表示(Y/N)
6570 DATA ---,X方向始点(原点相対),---,X方向長さ,---,X方向幅
6580 DATA ---,Y方向始点(原点相対),---,Y方向長さ,---,Y方向幅
6590 DATA 1,倍率(x),1,倍率(y),,,,,,,,,,,,
6600 DATA ---,パラメーター開始値,---,パラメーター終了値
6610 DATA 0.01,パラメーター増分,,,,,,,,,,
6620 DATA t,式入力(x),t,式入力(y)
6630 DATA 1.5,グラフの太さ,0.8,座標軸の太さ,0.1,方眼の太さ,,,,,,
6640 DATA 縦の長さ
6650 DATA 横の長さ
6660 DATA Xの範囲(始め,終わり)
6670 DATA Yの範囲(始め,終わり)
6680 DATA Y軸目盛りの対X軸比
6690 DATA グラフを重ねますか。
6700 *PSDATA '-------------------------------
6710 DATA /Times-BoldItalic findfont
6720 DATA 15 scalefont
6730 DATA setfont
6740 DATA /inc { 1 index load add def } def
6750 DATA /pletter { moveto show } def
6760 DATA /mesh {
6770 DATA setlinewidth
6780 DATA /y ystart def
6790 DATA ylength yinte div floor cvi 1 add
6800 DATA {
6810 DATA xstart y moveto
6820 DATA xlength 0 rlineto
6830 DATA /y yinte inc
6840 DATA } repeat
6850 DATA /x xstart def
6860 DATA xlength xinte div floor cvi 1 add
6870 DATA {
6880 DATA x ystart moveto
6890 DATA 0 ylength rlineto
6900 DATA /x xinte inc
6910 DATA } repeat
6920 DATA stroke
6930 DATA } def
6940 DATA /axis {
6950 DATA setlinewidth
6960 DATA xstart 0 moveto
6970 DATA xlength 0 rlineto
6980 DATA 0 ystart moveto
6990 DATA 0 ylength rlineto
7000 DATA stroke
7010 DATA } def
7020 DATA /unitscale {
7030 DATA /yscale exch yinte mul def
7040 DATA /xscale exch xinte mul def
7050 DATA } def
7060 DATA /scalexy {
7070 DATA /xx x xscale mul def
7080 DATA /yy y yscale mul def
7090 DATA } def
7100 DATA /check {
7110 DATA xx xstart ge
7120 DATA xx xstart xlength add le
7130 DATA and
7140 DATA yy ystart ge
7150 DATA yy ystart ylength add le
7160 DATA and and
7170 DATA } def
7180 DATA /exe {
7190 DATA {
7200 DATA cx cy
7210 DATA scalexy
7220 DATA check
7230 DATA { exit } if
7240 DATA /t tinte inc
7250 DATA } loop
7260 DATA xx yy moveto
7270 DATA tend tstart sub tinte div abs floor cvi
7280 DATA {
7290 DATA /t tinte inc
7300 DATA cx cy
7310 DATA scalexy
7320 DATA check
7330 DATA { xx yy lineto } if
7340 DATA } repeat
7350 DATA } def
7360 DATA /e 2.71828 def
7370 DATA z
7380 *START.DATA
7390 DATA %
7400 DATA newpath
7410 DATA zz21,zz22,translate
7420 DATA /xstart ,zz33,def
7430 DATA /xlength,zz34,def
7440 DATA /xinte ,zz35,def
7450 DATA /ystart ,zz36,def
7460 DATA /ylength,zz37,def
7470 DATA /yinte ,zz38,def
7480 DATA zz31,{,zz64,axis } if
7490 DATA zz32,{,zz65,mesh } if
7500 DATA (,zz11,) xstart xlength add 10 add 0 pletter
7510 DATA zz41,zz42,unitscale
7520 DATA /tstart,zz51,def
7530 DATA /tend,zz52,def
7540 DATA /tinte,zz53,def
7550 DATA /cx { /x,zz61,def } def
7560 DATA /cy { /y,zz62,def } def
7570 DATA /t tstart def
7580 DATA zz63,setlinewidth
7590 DATA exe
7600 DATA stroke
7610 DATA z
7620 '----------------------------------------
7630 *SPECIAL
7640 DIM Q$(10,1),QN(10)
7650 ' 12345678901234567890123456789012 1-32
7660 C$="+-*/^sclet().0123456789inoaqrgxp"
7670 I=0
7680 ERRFLAG=0
7690 DD$=""
7700 FOR J=1 TO LEN(D$)
7710 A$=MID$(D$,J,1)
7720 A$=CHR$(ASC(A$)+&H20*ABS(ASC(A$)>&H40 AND ASC(A$)<&H5B))
7730 DD$=DD$+A$
7740 NEXT J
7750 D$=DD$
7760 Q$(I,0)=D$
7770 *SP_LOOP
7780 GOSUB *TABLE
7790 TEM$=""
7800 FOR SI=0 TO I
7810 TEM$=TEM$+Q$(I,0)
7820 NEXT SI
7830 IF TEM$<>"" THEN *SP_LOOP
7840 *EN 'END
7850 DP$=Q$(0,1)
7860 IF DP$="" THEN ERRFLAG=-1
7870 IF ERRFLAG THEN *EREND
7880 ERASE Q$,QN
7890 RETURN
7900 *EREND
7910 ERASE Q$,QN
7920 RETURN
7930 '
7940 *TABLE
7950 GOSUB *GW1
7960 IF AA>=13 AND AA<=23 THEN *GNUM
7970 ON AA GOSUB *PLUS,*MINUS,*MULTIPLE,*DIVIDE,*POWER,*SSSR,*SC,*SL,*SE,*TT,*PERO,*PERC
7980 RETURN
7990 '
8000 *GW1
8010 AA=0:AAN=0
8020 IF Q$(I,0)="" THEN RETURN
8030 A$=LEFT$(Q$(I,0),1)
8040 Q$(I,0)=RIGHT$(Q$(I,0),LEN(Q$(I,0))-1)
8050 AN$=LEFT$(Q$(I,0),1)
8060 AA=INSTR(C$,A$)
8070 AAN=INSTR(C$,AN$)
8080 IF AA<6 AND AAN<6 THEN *GW1
8090 IF AA=0 THEN *GW1
8100 RETURN
8110 '
8120 *GNUM
8130 Q$(I,1)=Q$(I,1)+A$
8140 WHILE AAN>=13
8150 GOSUB *GW1
8160 Q$(I,1)=Q$(I,1)+A$
8170 WEND
8180 Q$(I,1)=Q$(I,1)+" "
8190 RETURN
8200 '
8210 *PLUS
8220 GOSUB *TABLE
8230 IF AAN<>1 AND AAN<>2 THEN *PLUS
8240 Q$(I,1)=Q$(I,1)+"add "
8250 RETURN
8260 *MINUS
8270 IF Q$(I,1)="" THEN Q$(I,1)="-":RETURN *TABLE
8280 *MINUS_1
8290 GOSUB *TABLE
8300 IF AAN<>1 AND AAN<>2 THEN *MINUS_1
8310 Q$(I,1)=Q$(I,1)+"sub "
8320 RETURN
8330 *MULTIPLE
8340 GOSUB *TABLE
8350 IF AAN=5 THEN *MULTIPLE
8360 Q$(I,1)=Q$(I,1)+"mul "
8370 RETURN
8380 *DIVIDE
8390 GOSUB *TABLE
8400 IF AAN=5 THEN *DIVIDE
8410 Q$(I,1)=Q$(I,1)+"div "
8420 RETURN
8430 *POWER
8440 GOSUB *TABLE
8450 IF AAN=5 THEN *POWER
8460 Q$(I,1)=Q$(I,1)+"exp "
8470 RETURN
8480 *SSSR
8490 IF AAN<>24 THEN *SSSR_1 ELSE GOSUB *GW1
8500 IF AAN<>25 THEN RETURN ELSE GOSUB *GW1
8510 GOSUB *TABLE
8520 Q$(I,1)=Q$(I,1)+"sin "
8530 RETURN
8540 *SSSR_1
8550 IF AAN<>28 THEN RETURN ELSE GOSUB *GW1
8560 IF AAN<>29 THEN RETURN ELSE GOSUB *GW1
8570 GOSUB *TABLE
8580 Q$(I,1)=Q$(I,1)+"sqrt "
8590 RETURN
8600 *SC
8610 IF AAN<>26 THEN RETURN ELSE GOSUB *GW1
8620 IF AAN<>6 THEN RETURN ELSE GOSUB *GW1
8630 GOSUB *TABLE
8640 Q$(I,1)=Q$(I,1)+"cos "
8650 RETURN
8660 *SL
8670 IF AAN<>26 THEN RETURN ELSE GOSUB *GW1
8680 IF AAN<>30 THEN RETURN ELSE GOSUB *GW1
8690 GOSUB *TABLE
8700 Q$(I,1)=Q$(I,1)+"ln "
8710 RETURN
8720 *SE
8730 IF AAN<>31 THEN RETURN ELSE GOSUB *GW1
8740 IF AAN<>32 THEN RETURN ELSE GOSUB *GW1
8750 GOSUB *TABLE
8760 Q$(I,1)=Q$(I,1)+"e exch exp "
8770 *TT
8780 IF AAN<>27 THEN Q$(I,1)=Q$(I,1)+"t " ELSE GOSUB *GW1
8790 IF AAN<>25 THEN RETURN ELSE GOSUB *GW1
8800 GOSUB *TABLE
8810 Q$(I,1)=Q$(I,1)+"dup sin exch cos div "
8820 RETURN
8830 *PERO
8840 J=1
8850 *PERO_1
8860 GOSUB *GW1
8870 IF AA=11 THEN J=J+1
8880 IF AA=12 THEN J=J-1
8890 IF AA=0 THEN *PERO_ERR
8900 IF J<>0 THEN Q$(I+1,0)=Q$(I+1,0)+A$:GOTO *PERO_1
8910 QN(I)=AAN
8920 I=I+1
8930 *PERO_2
8940 GOSUB *TABLE
8950 IF Q$(I,0)<>"" THEN *PERO_2
8960 I=I-1
8970 AAN=QN(I)
8980 Q$(I,1)=Q$(I,1)+Q$(I+1,1)
8990 Q$(I+1,0)=""
9000 Q$(I+1,1)=""
9010 RETURN
9020 *PERO_ERR
9030 PRINT "開きかっこが多すぎます。"
9040 GOTO *RET_ERR
9050 *PERC
9060 PRINT "閉じかっこが多すぎます。"
9070 *RET_ERR
9080 ERRFLAG=-1
9090 RETURN